#pragma once

#include "modeExit.hpp"
namespace qbe::state {

struct SwitchModeEvent {
  AllModeType mode;
  int rotateInfo = -1;
  bool quickAling_isPoint = false;
  bool use_default_quick_align = false;

  bool mirrorIsX = false;
  bool sliceIsX = false;
};

struct ExitModeEvent {};
struct SaveExitModeEvent {};

struct FlushHeightLight {
  DrawingModeType drawing;
  EditingModeType editing;
  SelectModeType select;

  bool switchSelect = false;
};

struct FlushHeightLightT {
  bool isAdsorption = false;
};

struct CurrentModeEvent {
  DrawingModeType drawingMode;
  EditingModeType editingMode;
  SelectModeType selectMode;

  bool switchSelectMode;
};

struct UiEnableEvent {
  bool is_whole_selected_graph = false;
  bool is_part_selected_grpah = false;

  bool have_select_obj = false;  // 是否存在选中对象
  bool have_paste_obj = false;   // 是否存在可粘贴对象
  bool redo_enable = false;      // 是否可恢复
  bool undo_enable = false;      // 是否可撤销

  bool select_region_cutting_obj = false;  // 区域切割对应的特殊选中对象
  bool select_merge_obj = false;           // 合并对应的特殊选中对象

  bool select_any_two_obj = false;  // 选择任意两个或以上对象
  bool selct_boolean_obj = false;   // 选中布尔运算的两个或以上对象

  bool select_array_copy = false;  // 选中阵列复制所需条件

  bool select_one_obj = false;  // 选中仅一个对象
  bool in_lower_cell = false;   // 处于下层单元画板

  bool select_no3d_any_obj = false;   // 另存为单元条件
  bool lock_obj = false;              // 锁定对象条件
  bool select_least_one_obj = false;  //选中至少一个引用对象
};

struct AngleBevel {
  bool value;
};

struct AngleLock {
  bool value;
};

struct Absorb {
  bool value;
  double precision;
};

struct SetManualAngle {};

struct SetCopy {};

struct SetAffix {};

struct SetDelete {};

struct SetLock {};

struct SetCancelLock {};

struct SetProperty {};

}  // namespace qbe::state